# 注意在 setting.py 文件中新增配置：ASGI_APPLICATION = 'apps.ws.routing.application'
from channels.routing import (
    ProtocolTypeRouter,     # 用于根据不同的协议类型分发请求
    URLRouter,  # 用于将 WebSocket 连接路由到特定的消费者。
    ChannelNameRouter   # 用于将通道名路由到特定的消费者。
)
from django.urls import re_path
# AsyncWSConsumer 和 PeriodicConsumer：自定义的消费者类，分别处理 WebSocket 连接和周期性任务
from apps.ws.consumers import (
    AsyncWSConsumer,    # 处理 WebSocket 消息的异步消费者类（需实现 connect(), receive() 等方法）
    PeriodicConsumer,    # 处理特定通道消息的消费者（通常用于定时任务或异步事件）
)
from django.core.asgi import get_asgi_application   # 获取 Django 的 ASGI 应用程序，用于处理 HTTP 请求。
from ws.auth import JWTAuthMiddlewareStack


application = ProtocolTypeRouter(
    {
        "websocket": JWTAuthMiddlewareStack(
            URLRouter([
                re_path(r"^ws/$", AsyncWSConsumer.as_asgi()),
            ])
        ),
        # 通道层，可以不使用
        "channel": ChannelNameRouter({
            "periodic_sending": PeriodicConsumer.as_asgi(),
        }),
        'http': get_asgi_application()
    }
)
